package Day_0223.NetWork;

/**
 * @author zxc
 * @date 2023/02/23 23:04
 **/
public class BIO_NIO_AIO {
    public static void main(String[] args) {
        /**
         * nio和 bio 、aio的区别
         * ===》
         * 1.消息时的系统通信，通常基于网络协议实现。常见的协议包括TCP/IP,UDP/IP。
         * ===》
         * TCP/IP等协议用于数据传输，但要完成通信，还需要对数据进行处理。例如读取和写入数据。
         *
         * 2.I/O可以分为两种：
         * ===》同步IO和异步IO,同步I/O最常见的是 BIO(Blocking IO)、NIO(Non-Blocking IO)
         *
         * 3.BIO ：
         * ===》
         * 是当发起I/O的读或写操作时，均为阻塞方式，直到应用程序读到了流或者将流写入数据。
         *
         * 4.NIO ：
         * （1）基于事件驱动思想，常采用reactor（反应器）模式。
         * （2）当发起 IO请求时，应用程序是非阻塞的。
         * （3）当SOCKET有流可读或写的时候，由操作系统通知应用程序，应用程序再将流读取到缓冲区或者写入系统。
         * ===》
         * 即，发起IO请求后，NIO是不会一直等待，而是等待操作系统 通知当前线程去执行IO操作;
         *
         * 5.AIO ：
         * （1）同样基于事件驱动的思想，通常采用Proactor(前摄器模式)实现。
         * （2）对于读操作，操作系统将数据读到缓冲区，并通知应用程序，对于写操作，操作系统将write方法传递的流写入并主动通知应用程序。
         * （3）它节省了NIO中遍历事件通知队列的代价。
         * ===》
         * 即，发起IO请求后，AIO也是不会一直等待，会直接返回;
         * 同时，有操作系统完成IO操作后，再去通知当前线程;
         *
         * 6.阻塞 ：
         * 某个请求发出后，由于该请求操作需要的条件不满足，请求操作一直阻塞，不会返回，直到条件满足。
         *
         * 7.非阻塞 ：
         * 请求发出后，若该请求需要的条件不满足，则立即返回一个标志信息，告知条件不满足，而不会一直等待。
         * 一般需要通过循环，判断请求条件是否满足来获取请求结果。
         *
         * 8.NIO和AIO的区别
         * （1）AIO是操作系统完成IO并通知应用程序
         * （2）NIO是操作系统通知应用程序，由应用程序完成。
         *
         * 9.reactor 模型
         * （1）当客户端请求抵达后，服务处理程序使用多路分配策略，由一个非阻塞的线程来接收所有的请求，
         * （2）然后派发这些请求至相关的工作线程进行处理;
         *
         */
    }
}
